package Java2Test.Reflect.Reflect1;

public class Demo1 {
    public static void main(String[] args) throws ClassNotFoundException {

        // 方式一：通过全限定名动态加载类（最常用）
        // 适用于：运行时根据配置或用户输入确定类名的场景
        // 注意：需处理ClassNotFoundException
        Class<?> clazz1 = Class.forName("Java2Test.Reflect.Reflect1.Student");

        // 方式二：通过类字面量直接获取Class对象（编译时确定）
        // 适用于：作为参数传递（如反射方法调用、泛型约束）
        // 优点：代码更简洁，无需异常处理
        Class<Student> clazz2 = Student.class;

        // 方式三：通过对象实例获取Class对象
        // 适用于：已有对象实例，需动态获取其类型信息
        // 注意：返回的类型是"对象实际类型的Class"（支持多态）
        Student s = new Student();
        Class<? extends Student> clazz3 = s.getClass();

        // 验证三种方式获取的Class对象是否相同
        System.out.println(clazz1 == clazz2); // true
        System.out.println(clazz2 == clazz3); // true
    }
}